grub2: Generate config from pending deployment
authorRobert Fairley <rfairley@redhat.com>
Thu, 14 Mar 2019 23:16:07 +0000 (19:16 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 24 Apr 2019 21:29:39 +0000 (21:29 +0000)
Generate a grub2 config using the pending deployment, if a grub2
bootloader is detected in the sysroot. Allows grub2-mkconfig
to run if there are no previous deployments.

Fixes: #1774
Closes: #1831
Approved by: jlebon

src/libostree/ostree-bootloader-grub2.c
src/libostree/ostree-bootloader-syslinux.c
src/libostree/ostree-bootloader-uboot.c
src/libostree/ostree-bootloader.c
src/libostree/ostree-bootloader.h
src/libostree/ostree-sysroot-deploy.c

index 57673c7d6b215c2ce122563c7f5c3e311482d9af..ceea682ef9ed95926b0dbd04e9aee723bbd84e53 100644 (file)
@@ -332,6 +332,7 @@ grub2_child_setup (gpointer user_data)
 static gboolean
 _ostree_bootloader_grub2_write_config (OstreeBootloader      *bootloader,
                                        int                    bootversion,
+                                       GPtrArray             *new_deployments,
                                        GCancellable          *cancellable,
                                        GError               **error)
 {
@@ -357,15 +358,11 @@ _ostree_bootloader_grub2_write_config (OstreeBootloader      *bootloader,
   if (use_system_grub2_mkconfig && ostree_sysroot_get_booted_deployment (self->sysroot) == NULL
       && g_file_has_parent (self->sysroot->path, NULL))
     {
-      g_autoptr(GPtrArray) deployments = NULL;
       OstreeDeployment *tool_deployment;
       g_autoptr(GFile) tool_deployment_root = NULL;
 
-      deployments = ostree_sysroot_get_deployments (self->sysroot);
-
-      g_assert_cmpint (deployments->len, >, 0);
-
-      tool_deployment = deployments->pdata[0];
+      g_assert_cmpint (new_deployments->len, >, 0);
+      tool_deployment = new_deployments->pdata[0];
 
       /* Sadly we have to execute code to generate the bootloader configuration.
        * If we're in a booted deployment, we just don't chroot.
@@ -380,6 +377,8 @@ _ostree_bootloader_grub2_write_config (OstreeBootloader      *bootloader,
       grub2_mkconfig_chroot = g_file_get_path (tool_deployment_root);
     }
 
+  g_debug ("Using grub2-mkconfig chroot: %s\n", grub2_mkconfig_chroot);
+
   g_autoptr(GFile) new_config_path = NULL;
   g_autoptr(GFile) config_path_efi_dir = NULL;
   if (self->is_efi)
index 8b09a861b240eb0f1ec5a4cb85989fe44e46d179..5fb8a1dbd2672e1ab4d68e2c49d9ade9ad2ba917 100644 (file)
@@ -108,10 +108,11 @@ append_config_from_loader_entries (OstreeBootloaderSyslinux  *self,
 }
 
 static gboolean
-_ostree_bootloader_syslinux_write_config (OstreeBootloader          *bootloader,
-                                          int                    bootversion,
-                                          GCancellable          *cancellable,
-                                          GError               **error)
+_ostree_bootloader_syslinux_write_config (OstreeBootloader  *bootloader,
+                                          int                bootversion,
+                                          GPtrArray         *new_deployments,
+                                          GCancellable      *cancellable,
+                                          GError           **error)
 {
   OstreeBootloaderSyslinux *self = OSTREE_BOOTLOADER_SYSLINUX (bootloader);
 
index 531a3756006d70c00940b443b5ec3003c1bb331e..87a938067825ad309d307f442ba1b8b042d80e9e 100644 (file)
@@ -158,10 +158,11 @@ create_config_from_boot_loader_entries (OstreeBootloaderUboot     *self,
 }
 
 static gboolean
-_ostree_bootloader_uboot_write_config (OstreeBootloader          *bootloader,
-                                  int                    bootversion,
-                                  GCancellable          *cancellable,
-                                  GError               **error)
+_ostree_bootloader_uboot_write_config (OstreeBootloader *bootloader,
+                                       int               bootversion,
+                                       GPtrArray        *new_deployments,
+                                       GCancellable     *cancellable,
+                                       GError          **error)
 {
   OstreeBootloaderUboot *self = OSTREE_BOOTLOADER_UBOOT (bootloader);
 
index 87823f7ea590f38258f2bc81b466be5550875a6d..5b8125dcc45d2c522a9b0bbf2edba08866027c5f 100644 (file)
@@ -54,13 +54,15 @@ _ostree_bootloader_get_name (OstreeBootloader  *self)
 gboolean
 _ostree_bootloader_write_config (OstreeBootloader  *self,
                             int            bootversion,
+                            GPtrArray     *new_deployments,
                             GCancellable  *cancellable,
                             GError       **error)
 {
   g_return_val_if_fail (OSTREE_IS_BOOTLOADER (self), FALSE);
 
-  return OSTREE_BOOTLOADER_GET_IFACE (self)->write_config (self, bootversion, 
-                                                       cancellable, error);
+  return OSTREE_BOOTLOADER_GET_IFACE (self)->write_config (self, bootversion,
+                                                           new_deployments,
+                                                           cancellable, error);
 }
 
 gboolean
index a4793b08c899ed90f4652a9876f61adfefc2621f..5af2dcc8a3d90252ca0c5459aea489c3a321fc6a 100644 (file)
@@ -44,6 +44,7 @@ struct _OstreeBootloaderInterface
   const char *         (* get_name)               (OstreeBootloader  *self);
   gboolean             (* write_config)           (OstreeBootloader  *self,
                                                    int            bootversion,
+                                                   GPtrArray     *new_deployments,
                                                    GCancellable  *cancellable,
                                                    GError       **error);
   gboolean             (* is_atomic)              (OstreeBootloader  *self);
@@ -61,6 +62,7 @@ const char *_ostree_bootloader_get_name (OstreeBootloader  *self);
 
 gboolean _ostree_bootloader_write_config (OstreeBootloader  *self,
                                           int            bootversion,
+                                          GPtrArray     *new_deployments,
                                           GCancellable  *cancellable,
                                           GError       **error);
 
index d37861b7bae5cfc90edd0dd2552da25ea120cfb7..22aa4a4385e29b50318f20e240b2804218a95802 100644 (file)
@@ -2122,7 +2122,8 @@ write_deployments_bootswap (OstreeSysroot     *self,
   if (bootloader)
     {
       if (!_ostree_bootloader_write_config (bootloader, new_bootversion,
-                                            cancellable, error))
+                                            new_deployments, cancellable,
+                                            error))
         return glnx_prefix_error (error, "Bootloader write config");
     }